import js from '@eslint/js'
import globals from 'globals'
import tseslint from 'typescript-eslint'
import pluginVue from 'eslint-plugin-vue'
import eslintPluginPrettier from 'eslint-plugin-prettier/recommended'
import { defineConfig } from 'eslint/config'

export default defineConfig([
  {
    files: ['**/*.{js,mjs,cjs,ts,mts,cts,vue}'],
    plugins: { js },
    extends: ['js/recommended']
  },
  {
    files: ['**/*.{js,mjs,cjs,ts,mts,cts,vue}'],
    languageOptions: {
      globals: {
        ...globals.browser,
        ...globals.node
      }
    }
  },
  tseslint.configs.recommended,
  // 添加 auto-import 插件配置
  {
    plugins: {
      'auto-import': require('eslint-plugin-auto-import').default
    },
    rules: {
      'auto-import/auto-import': [
        'error',
        {
          // 自动导入配置
          declarations: [
            {
              default: 'defineComponent',
              from: 'vue'
            },
            {
              default: 'ref',
              from: 'vue'
            },
            {
              default: 'reactive',
              from: 'vue'
            }
          ]
        }
      ]
    }
  },
  pluginVue.configs['flat/essential'],
  { files: ['**/*.vue'], languageOptions: { parserOptions: { parser: tseslint.parser } } },
  {
    rules: {
      '@typescript-eslint/ban-ts-comment': 'off', // 禁止使用 @ts-ignore 和 @ts-expect-error
      'no-var': 'error', // 要求使用 let 或 const 而不是 var
      'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允许多个空行
      'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
      'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
      'no-unexpected-multiline': 'error', // 禁止空余的多行
      'no-useless-escape': 'off', // 禁止不必要的转义字符

      // typeScript (https://typescript-eslint.io/rules)
      '@typescript-eslint/no-unused-vars': 'error', // 禁止定义未使用的变量
      '@typescript-eslint/prefer-ts-expect-error': 'error', // 禁止使用 @ts-ignore
      '@typescript-eslint/no-explicit-any': 'off', // 禁止使用 any 类型
      '@typescript-eslint/no-non-null-assertion': 'off', // 禁止使用非空断言操作符（!）
      '@typescript-eslint/no-namespace': 'off', // 禁止使用自定义 TypeScript 模块和命名空间。
      '@typescript-eslint/semi': 'off', // 禁止使用分号
      // eslint-plugin-vue (https://eslint.vuejs.org/rules/)
      'vue/multi-word-component-names': 'off', // 要求组件名称始终为 “-” 链接的单词
      'vue/no-mutating-props': 'off', // 不允许组件 prop的改变
      'vue/attribute-hyphenation': 'off', // 对模板中的自定义组件强制执行属性命名样式
      'prettier/prettier': [
        // 使用 prettier  规则
        'error',
        {},
        { usePrettierrc: true, configFile: 'prettier.config.js' } // 指定使用 prettier.config.js 配置文件
      ]
    }
  },
  eslintPluginPrettier, // 使用 prettier 规则
  {
    ignores: ['node_modules/', 'dist/', '**/*.d.ts', 'public/', '**/*.cjs']
  }
])
